home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / plr1control.s < prev    next >
Text File  |  1997-01-31  |  10KB  |  677 lines

  1.  
  2. PLR1_mouse_control
  3.  jsr ReadMouse
  4.  
  5.  move.l #SineTable,a0
  6.  move.w PLR1s_angspd,d1
  7.  move.w angpos,d0
  8.  and.w #8190,d0
  9.  move.w d0,PLR1s_angpos
  10.  move.w (a0,d0.w),PLR1s_sinval
  11.  adda.w #2048,a0
  12.  move.w (a0,d0.w),PLR1s_cosval
  13.  
  14.  move.l PLR1s_xspdval,d6
  15.  move.l PLR1s_zspdval,d7
  16.  
  17.  neg.l d6
  18.  ble.s .nobug1
  19.  asr.l #1,d6
  20.  add.l #1,d6
  21.  bra.s .bug1
  22. .nobug1
  23.  asr.l #1,d6
  24. .bug1:
  25.  
  26.  neg.l d7
  27.  ble.s .nobug2
  28.  asr.l #1,d7
  29.  add.l #1,d7
  30.  bra.s .bug2
  31. .nobug2
  32.  asr.l #1,d7
  33. .bug2: 
  34.  
  35.  move.w ymouse,d3
  36.  sub.w oldymouse,d3
  37.  add.w d3,oldymouse
  38. ; asr.w #1,d3
  39. ; cmp.w #50,d3
  40. ; ble.s nofastfor
  41. ; move.w #50,d3
  42. ;nofastfor:
  43. ; cmp.w #-50,d3
  44. ; bge.s nofastback
  45. ; move.w #-50,d3
  46. ;nofastback:
  47.  
  48.  move.w STOPOFFSET,d0
  49.  move.w d3,d2
  50.  asl.w #7,d2
  51.  
  52.  add.w d2,PLR1_AIMSPD
  53.  add.w d3,d0
  54.  cmp.w #-80,d0
  55.  bgt.s .nolookup
  56.  move.w #-512*20,PLR1_AIMSPD
  57.  move.w #-80,d0
  58. .nolookup:
  59.  cmp.w #80,d0
  60.  blt.s .nolookdown
  61.  move.w #512*20,PLR1_AIMSPD
  62.  move.w #80,d0
  63. .nolookdown
  64.  
  65.  move.w d0,STOPOFFSET
  66.  neg.w d0
  67.  add.w TOTHEMIDDLE,d0
  68.  move.w d0,SMIDDLEY
  69.  asr.w #1,d0
  70.  muls #104*4,d0
  71.  move.l d0,SBIGMIDDLEY
  72.  
  73.  move.l #KeyMap,a5
  74.  moveq #0,d7
  75.  move.b forward_key,d7
  76.  
  77.  btst #6,$bfe001
  78.  seq.s (a5,d7.w)
  79.  
  80.  move.b fire_key,d7
  81.  btst #2,$dff016
  82.  seq.s (a5,d7.w)
  83.  
  84.  bra PLR1_keyboard_control
  85.  
  86.  move.w #-20,d2
  87.  
  88.  tst.b PLR1_Ducked
  89.  beq.s .nohalve
  90.  asr.w #1,d2
  91. .nohalve
  92.  
  93.  btst #6,$bfe001
  94.  beq.s .moving
  95.  moveq #0,d2
  96. .moving:
  97.  
  98.  move.w d2,d3
  99.  asl.w #4,d2
  100.  move.w d2,d1
  101.  
  102.  move.w d1,ADDTOBOBBLE
  103.  
  104.  move.w PLR1s_sinval,d1
  105.  move.w PLR1s_cosval,d2
  106.  
  107.  move.w d2,d4
  108.  move.w d1,d5
  109.  muls lrs,d4
  110.  muls lrs,d5
  111.  
  112.  muls d3,d2
  113.  muls d3,d1
  114.  sub.l d4,d1
  115.  add.l d5,d2
  116.  
  117.  sub.l d1,d6
  118.  sub.l d2,d7
  119.  add.l d6,PLR1s_xspdval
  120.  add.l d7,PLR1s_zspdval
  121.  move.l PLR1s_xspdval,d6
  122.  move.l PLR1s_zspdval,d7
  123.  add.l d6,PLR1s_xoff
  124.  add.l d7,PLR1s_zoff
  125.  
  126.  tst.b PLR1_fire
  127.  beq.s .firenotpressed
  128. ; fire was pressed last time.
  129.  btst #7,$bfe001
  130.  bne.s .firenownotpressed
  131. ; fire is still pressed this time.
  132.  st PLR1_fire
  133.  bra .doneplr1
  134.  
  135. .firenownotpressed:
  136. ; fire has been released.
  137.  clr.b PLR1_fire
  138.  bra .doneplr1
  139.  
  140. .firenotpressed
  141.  
  142. ; fire was not pressed last frame...
  143.  
  144.  btst #7,$bfe001
  145. ; if it has still not been pressed, go back above
  146.  bne.s .firenownotpressed
  147. ; fire was not pressed last time, and was this time, so has
  148. ; been clicked.
  149.  st PLR1_clicked
  150.  st PLR1_fire
  151.  
  152. .doneplr1:
  153.  
  154.  bsr PLR1_fall
  155.  
  156.  rts
  157.  
  158. ADDTOBOBBLE: dc.w 0
  159.  
  160. PLR1_follow_path:
  161.  
  162.  move.l pathpt,a0
  163.  move.w (a0),d1
  164.  move.w d1,PLR1s_xoff
  165.  move.w 2(a0),d1
  166.  move.w d1,PLR1s_zoff
  167.  move.w 4(a0),d0
  168.  add.w d0,d0
  169.  and.w #8190,d0
  170.  move.w d0,PLR1_angpos
  171.  
  172.  move.w TempFrames,d0
  173.  asl.w #3,d0
  174.  adda.w d0,a0
  175.  
  176.  cmp.l #endpath,a0
  177.  blt notrestartpath
  178.  move.l #Path,a0
  179. notrestartpath:
  180.  move.l a0,pathpt
  181.  
  182.  rts
  183.  
  184. PLR1_alwayskeys
  185.  move.l #KeyMap,a5
  186.  moveq #0,d7
  187.  move.b operate_key,d7
  188.  move.b (a5,d7.w),d1
  189.  beq.s nottapped
  190.  tst.b OldSpace
  191.  bne.s nottapped
  192.  st PLR1_SPCTAP
  193. nottapped:
  194.  move.b d1,OldSpace
  195.  
  196.  move.b duck_key,d7
  197.  tst.b (a5,d7.w)
  198.  beq.s notduck
  199.  clr.b (a5,d7.w)
  200.  move.l #playerheight,PLR1s_targheight
  201.  not.b PLR1_Ducked
  202.  beq.s notduck
  203.  move.l #playercrouched,PLR1s_targheight
  204. notduck:
  205.  
  206.  move.l PLR1_Roompt,a4
  207.  move.l ToZoneFloor(a4),d0
  208.  sub.l ToZoneRoof(a4),d0
  209.  tst.b PLR1_StoodInTop
  210.  beq.s usebottom
  211.  move.l ToUpperFloor(a4),d0
  212.  sub.l ToUpperRoof(a4),d0
  213. usebottom:
  214.  
  215.  cmp.l #playerheight+3*1024,d0
  216.  bgt.s oktostand
  217.  st PLR1_Ducked
  218.  move.l #playercrouched,PLR1s_targheight
  219. oktostand:
  220.  
  221.  move.l PLR1s_height,d0
  222.  move.l PLR1s_targheight,d1
  223.  cmp.l d1,d0
  224.  beq.s noupordown
  225.  bgt.s crouch
  226.  add.l #1024,d0
  227.  bra noupordown
  228. crouch:
  229.  sub.l #1024,d0
  230. noupordown:
  231.  move.l d0,PLR1s_height
  232.  
  233.  tst.b $27(a5)
  234.  beq.s notselkey
  235.  st PLR1KEYS
  236.  clr.b PLR1PATH
  237.  clr.b PLR1MOUSE
  238.  clr.b PLR1JOY
  239. notselkey:
  240.  
  241.  tst.b $26(a5)
  242.  beq.s notseljoy
  243.  clr.b PLR1KEYS
  244.  clr.b PLR1PATH
  245.  clr.b PLR1MOUSE
  246.  st PLR1JOY
  247. notseljoy:
  248.  
  249.  tst.b $37(a5)
  250.  beq.s notselmouse
  251.  clr.b PLR1KEYS
  252.  clr.b PLR1PATH
  253.  st PLR1MOUSE
  254.  clr.b PLR1JOY
  255. notselmouse:
  256.  
  257.  lea 1(a5),a4
  258.  move.l #PLAYERONEGUNS,a2
  259.  move.l PLR1_Obj,a3
  260.  move.w #9,d1
  261.  move.w #0,d2
  262. pickweap
  263.  move.w (a2)+,d0
  264.  and.b (a4)+,d0
  265.  beq.s notgotweap
  266.  move.b d2,PLR1_GunSelected
  267.  move.w #0,ObjTimer+128(a3)
  268.  
  269.  move.l #TEMPSCROLL,SCROLLPOINTER
  270.  move.w #0,SCROLLXPOS
  271.  move.l #TEMPSCROLL+160,ENDSCROLL
  272.  move.w #40,SCROLLTIMER
  273.  
  274. ; d2=number of gun.
  275.  
  276.  move.l LINKFILE,a4
  277.  add.l #GunObjects,a4
  278.  move.w (a4,d2.w*2),d2
  279.  
  280.  move.l LINKFILE,a4
  281.  add.l #ObjectNames,a4
  282.  muls #20,d2
  283.  add.l d2,a4
  284.  move.l #TEMPSCROLL,a2
  285.  move.w #19,d2
  286.  
  287. .copyname:
  288.  move.b (a4)+,d3
  289.  bne.s .oklet
  290.  move.b #32,d3
  291. .oklet:
  292.  move.b d3,(a2)+
  293.  
  294.  dbra d2,.copyname
  295.  
  296.  bra.s gogog
  297.  
  298. notgotweap
  299.  addq #1,d2
  300.  dbra d1,pickweap
  301.  
  302. gogog:
  303.  
  304.  ifeq CHEESEY
  305.  tst.b $43(a5)
  306.  beq.s .notswapscr
  307.  tst.b lastscr
  308.  bne.s .notswapscr2
  309.  st lastscr
  310.  
  311.  not.b FULLSCRTEMP
  312.  
  313.  bra.s .notswapscr2
  314.  
  315. .notswapscr:
  316.  clr.b lastscr
  317. .notswapscr2:
  318.  
  319.  endc
  320.  
  321.  rts
  322.  
  323. FULLSCRTEMP: dc.w 0
  324.  
  325. WIPEDISPLAY:
  326.  move.l #231,d0
  327.  moveq #0,d1
  328.  
  329.  move.w #7,d2
  330. planel:
  331.  move.l #231,d0
  332.  
  333. wipe:
  334.  move.l d1,2(a0)
  335.  move.l d1,6(a0)
  336.  move.l d1,10(a0)
  337.  move.l d1,14(a0)
  338.  move.l d1,18(a0)
  339.  move.l d1,22(a0)
  340.  move.l d1,26(a0)
  341.  move.l d1,30(a0)
  342.  move.l d1,34(a0)
  343.  add.w #40,a0
  344.  dbra d0,wipe
  345.  add.w #40*24,a0
  346.  dbra d2,planel
  347.  
  348.  rts
  349.  
  350. GUNVALS: 
  351. ; machine gun
  352.  dc.b 0
  353. ; shotgun
  354.  dc.b 7
  355. ; plasma
  356.  dc.b 1
  357. ; grenade
  358.  dc.b 4
  359. ; rocket
  360.  dc.b 2
  361.  
  362. TOTHEMIDDLE: dc.w 0
  363. BIGsmall: dc.b 0
  364. lastscr: dc.b 0
  365. BOTTOMY: dc.w 0
  366.  even
  367.  
  368. PLR1_keyboard_control:
  369.  
  370.  move.l #SineTable,a0
  371.  
  372.  jsr PLR1_alwayskeys
  373.  move.l #KeyMap,a5
  374.  
  375.  move.w STOPOFFSET,d0
  376.  moveq #0,d7
  377.  move.b look_up_key,d7
  378.  tst.b (a5,d7.w)
  379.  beq.s .nolookup
  380.  
  381.  sub.w #512,PLR1_AIMSPD
  382.  sub.w #4,d0
  383.  cmp.w #-80,d0
  384.  bgt.s .nolookup
  385.  move.w #-512*20,PLR1_AIMSPD
  386.  move.w #-80,d0
  387. .nolookup:
  388.  moveq #0,d7
  389.  move.b look_down_key,d7
  390.  tst.b (a5,d7.w)
  391.  beq.s .nolookdown
  392.  add.w #512,PLR1_AIMSPD
  393.  add.w #4,d0
  394.  cmp.w #80,d0
  395.  blt.s .nolookdown
  396.  move.w #512*20,PLR1_AIMSPD
  397.  move.w #80,d0
  398. .nolookdown:
  399.  
  400.  
  401.  move.w d0,STOPOFFSET
  402.  neg.w d0
  403.  add.w TOTHEMIDDLE,d0
  404.  move.w d0,SMIDDLEY
  405.  asr.w #1,d0
  406.  muls #104*4,d0
  407.  move.l d0,SBIGMIDDLEY
  408.  
  409.  move.w PLR1s_angpos,d0
  410.  move.w PLR1s_angspd,d3
  411.  move.w #35,d1
  412.  move.w #2,d2
  413.  move.w #10,TURNSPD
  414.  moveq #0,d7
  415.  move.b run_key,d7
  416.  tst.b (a5,d7.w)
  417.  beq.s nofaster
  418.  move.w #60,d1
  419.  move.w #3,d2
  420.  move.w #14,TURNSPD
  421. nofaster:
  422.  tst.b PLR1_Ducked
  423.  beq.s .nohalve
  424.  asr.w #1,d2
  425. .nohalve
  426.  
  427.  moveq #0,d4 
  428.  
  429.  tst.b SLOWDOWN
  430.  beq.s .nofric
  431.  move.w d3,d5
  432.  add.w d5,d5
  433.  add.w d5,d3
  434.  asr.w #2,d3
  435.  bge.s .nneg
  436.  addq #1,d3
  437. .nneg:
  438. .nofric:
  439.  
  440.  move.b turn_left_key,templeftkey
  441.  move.b turn_right_key,temprightkey
  442.  move.b sidestep_left_key,tempslkey
  443.  move.b sidestep_right_key,tempsrkey
  444.  
  445.  move.b force_sidestep_key,d7
  446.  tst.b (a5,d7.w)
  447.  beq .noalwayssidestep
  448.  
  449.  move.b templeftkey,tempslkey
  450.  move.b temprightkey,tempsrkey
  451.  move.b #255,templeftkey
  452.  move.b #255,temprightkey
  453.  
  454. .noalwayssidestep:
  455.  
  456.  tst.b SLOWDOWN
  457.  beq.s noturnposs
  458.  
  459.  
  460.  move.b templeftkey,d7
  461.  tst.b (a5,d7.w)
  462.  beq.s noleftturn
  463.  sub.w TURNSPD,d3
  464. noleftturn
  465.  move.l #KeyMap,a5
  466.  move.b temprightkey,d7
  467.  tst.b (a5,d7.w)
  468.  beq.s norightturn
  469.  add.w TURNSPD,d3
  470. norightturn
  471.  
  472.  cmp.w d1,d3
  473.  ble.s .okrspd
  474.  move.w d1,d3
  475. .okrspd:
  476.  neg.w d1
  477.  cmp.w d1,d3
  478.  bge.s .oklspd
  479.  move.w d1,d3
  480. .oklspd:
  481.  
  482. noturnposs:
  483.  
  484.  add.w d3,d0
  485.  add.w d3,d0
  486.  move.w d3,PLR1s_angspd
  487.  
  488.  move.b tempslkey,d7
  489.  tst.b (a5,d7.w)
  490.  beq.s noleftslide
  491.  add.w d2,d4
  492.  add.w d2,d4
  493.  asr.w #1,d4
  494. noleftslide
  495.  move.l #KeyMap,a5
  496.  move.b tempsrkey,d7
  497.  tst.b (a5,d7.w)
  498.  beq.s norightslide
  499.  add.w d2,d4
  500.  add.w d2,d4
  501.  asr.w #1,d4
  502.  neg.w d4
  503. norightslide
  504.   
  505. noslide:
  506.   
  507.  and.w #8191,d0
  508.  move.w d0,PLR1s_angpos
  509.  
  510.  move.w (a0,d0.w),PLR1s_sinval
  511.  adda.w #2048,a0
  512.  move.w (a0,d0.w),PLR1s_cosval
  513.  
  514.  move.l PLR1s_xspdval,d6
  515.  move.l PLR1s_zspdval,d7
  516.  
  517.  tst.b SLOWDOWN
  518.  beq.s .nofriction
  519.  
  520.  neg.l d6
  521.  ble.s .nobug1
  522.  asr.l #3,d6
  523.  add.l #1,d6
  524.  bra.s .bug1
  525. .nobug1
  526.  asr.l #3,d6
  527. .bug1:
  528.  
  529.  neg.l d7
  530.  ble.s .nobug2
  531.  asr.l #3,d7
  532.  add.l #1,d7
  533.  bra.s .bug2
  534. .nobug2
  535.  asr.l #3,d7
  536. .bug2: 
  537.  
  538. .nofriction:
  539.  
  540.  moveq #0,d3
  541.  
  542.  moveq #0,d5
  543.  move.b forward_key,d5
  544.  tst.b (a5,d5.w)
  545.  beq.s noforward
  546.  neg.w d2
  547.  move.w d2,d3
  548.  
  549. noforward:
  550.  move.b backward_key,d5
  551.  tst.b (a5,d5.w)
  552.  beq.s nobackward
  553.  move.w d2,d3
  554. nobackward:
  555.  
  556.  move.w d3,d2
  557.  asl.w #6,d2
  558.  move.w d2,d1
  559. ; add.w d2,d1
  560. ; add.w d2,d1
  561.  move.w d1,ADDTOBOBBLE
  562.  
  563.  move.w PLR1s_sinval,d1
  564.  muls d3,d1
  565.  move.w PLR1s_cosval,d2
  566.  muls d3,d2
  567.  
  568.  sub.l d1,d6
  569.  sub.l d2,d7
  570.  move.w PLR1s_sinval,d1
  571.  muls d4,d1
  572.  move.w PLR1s_cosval,d2
  573.  muls d4,d2
  574.  sub.l d2,d6
  575.  add.l d1,d7
  576.  
  577.  tst.b SLOWDOWN
  578.  beq.s .nocontrolposs
  579.  add.l d6,PLR1s_xspdval
  580.  add.l d7,PLR1s_zspdval
  581. .nocontrolposs
  582.  move.l PLR1s_xspdval,d6
  583.  move.l PLR1s_zspdval,d7
  584.  add.l d6,PLR1s_xoff
  585.  add.l d7,PLR1s_zoff
  586.  
  587.  move.b fire_key,d5
  588.  tst.b PLR1_fire
  589.  beq.s .firenotpressed
  590. ; fire was pressed last time.
  591.  tst.b (a5,d5.w)
  592.  beq.s .firenownotpressed
  593. ; fire is still pressed this time.
  594.  st PLR1_fire
  595.  bra .doneplr1
  596.  
  597. .firenownotpressed:
  598. ; fire has been released.
  599.  clr.b PLR1_fire
  600.  bra .doneplr1
  601.  
  602. .firenotpressed
  603.  
  604. ; fire was not pressed last frame...
  605.  
  606.  tst.b (a5,d5.w)
  607. ; if it has still not been pressed, go back above
  608.  beq.s .firenownotpressed
  609. ; fire was not pressed last time, and was this time, so has
  610. ; been clicked.
  611.  st PLR1_clicked
  612.  st PLR1_fire
  613.  
  614. .doneplr1:
  615.  
  616.  bsr PLR1_fall
  617.  
  618.  rts
  619.  
  620. TEMPSCROLL
  621.  dcb.b 160,32
  622.  
  623. passspace:
  624.  ds.l 400 
  625.  
  626. PLR1_JoyStick_control:
  627.  
  628.  jsr _ReadJoy1
  629.  bra PLR1_keyboard_control
  630.  
  631. PLR1_clumptime: dc.w 0
  632.  
  633. PLR1clump:
  634.  
  635.  movem.l d0-d7/a0-a6,-(a7)
  636.  move.l PLR1_Roompt,a0
  637.  move.w ToFloorNoise(a0),d0
  638.  
  639.  move.l ToZoneWater(a0),d1
  640.  cmp.l ToZoneFloor(a0),d1
  641.  bge.s THERESNOWATER
  642.  
  643.  cmp.l PLR1_yoff,d1
  644.  blt.s THERESNOWATER
  645.  
  646.  move.w #6,d0
  647.  bra.s THERESWATER
  648.  
  649. THERESNOWATER:
  650.  
  651.  tst.b PLR1_StoodInTop
  652.  beq.s .okinbot
  653.  move.w ToUpperFloorNoise(a0),d0
  654. .okinbot:
  655.  
  656.  move.l LINKFILE,a0
  657.  add.l #FloorData,a0
  658.  move.w 2(a0,d0.w*4),d0    ; sample number.
  659.  
  660.  subq #1,d0
  661.  blt.s nofootsound
  662.  
  663.  
  664. THERESWATER:
  665.  move.w d0,Samplenum
  666.  move.w #0,Noisex
  667.  move.w #100,Noisez
  668.  move.w #80,Noisevol
  669.  move.b #$f9,IDNUM
  670.  clr.b notifplaying
  671.  jsr MakeSomeNoise
  672.  
  673. nofootsound:
  674.  movem.l (a7)+,d0-d7/a0-a6
  675.  
  676.  rts
  677.